/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;
import javax.swing.JOptionPane;
import model.Cliente;
import model.Projeto;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateUtil;

/**
 *
 * @author JONATAS
 */
public class ProjetoDAO {

    private Session session;
    // método construtor - igual ao nome da classe precedido por public

    public ProjetoDAO() {
        session = HibernateUtil.getSessionFactory().openSession();
    }

    public void insert(Projeto m) {
        Transaction t = session.beginTransaction();
        session.save(m);
        t.commit();
    }

    public void update(Projeto m) {
        Transaction t = session.beginTransaction();
        session.merge(m);
        t.commit();
    }

    public void delete(Projeto m) {
        Transaction t = session.beginTransaction();
        session.delete(m);
        t.commit();
    }

    public Projeto findById(int id) {
        Projeto project;
        try {            
             project = (Projeto)session.load(Projeto.class, id);
        }catch(Exception ex){
            System.out.println("Catch");
            JOptionPane.showMessageDialog(null, "Registro inexistente");            
            return null;
        }
        return project;
    }

    public List<Projeto> findAll() {
        return session.createCriteria(Projeto.class).list(); // faz um select * from marca
    }

    public List<Projeto> findByDescricao(String descricao) {

        Query q = session.createQuery("from Projeto where upper(pro_descricao) like upper(:X)");         
        q.setParameter("X", "%" + descricao + "%");          
        return q.list();
    }
    public List<Projeto> findByCliente(Cliente cliente) {

        Query q = session.createQuery("from Projeto where cliente = :X");
        q.setParameter("X",cliente);  
        return q.list();
    }
    public List<Object> findReport() {

        Query q = session.createSQLQuery("select pro_id from projeto join cliente  on projeto.cliente_tipopessoa = 0 and cliente_cpf_cnpj = cliente.cpf_cnpj where pro_id = 20");
        //q.setParameter("X",cliente);  
        return q.list();
    }
    
    public List<Projeto> findByIds(int id) {

        Query q = session.createQuery("from Projeto where pro_id = :X");
        q.setParameter("X", id);        
        return q.list();        
    }
    public List<Projeto> findComplementos(Projeto projeto) {

        Query q = session.createQuery("from Projeto where projetoPrincipal = :X");
        q.setParameter("X", projeto);        
        return q.list();        
    }
    public List<Projeto> findCustomizado(String condicaoWhere) {

        Query q = session.createQuery("from Projeto where "+condicaoWhere);        
        return q.list();
    }
  
}
